package hibernate;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import org.hibernate.Query;
import org.hibernate.Session;

public class TarjetasDAO {

    Session hSession = null;

    public TarjetasDAO() {
        this.hSession = HibernateUtil.getSessionFactory().openSession();
    }

    public void create(Cuentas cuentas, String numero, String codigoSeguridad, String fechaCaducidad, String pin, String tipo) {
        Tarjetas tarjeta = new Tarjetas(cuentas, numero, codigoSeguridad, fechaCaducidad, pin, tipo);
        this.hSession.beginTransaction();
        this.hSession.save(tarjeta);
        this.hSession.getTransaction().commit();
    }

    public void update(Integer pkTarjeta, String numero, String codigoSeguridad, String fechaCaducidad, String pin, String tipo) {
        Tarjetas tarjeta = this.get(pkTarjeta);
        tarjeta.setNumero(numero);
        tarjeta.setCodigoSeguridad(codigoSeguridad);
        tarjeta.setFechaCaducidad(fechaCaducidad);
        tarjeta.setPin(pin);
        tarjeta.setTipo(tipo);
        this.hSession.beginTransaction();
        this.hSession.update(tarjeta);
        this.hSession.getTransaction().commit();
    }
    
    public void update(Tarjetas tarjeta) {
        this.hSession.beginTransaction();
        this.hSession.update(tarjeta);
        this.hSession.getTransaction().commit();
    }

    public Tarjetas get(Integer pkTarjeta) {
        hSession.clear();
        Query q = hSession.createQuery("from Tarjetas where pkTarjeta='" +pkTarjeta+"'");
        List<Tarjetas> lista = q.list();
        if (!lista.isEmpty()) {
            return lista.get(0);
        }
        return null;
    }

    public List<Tarjetas> getList(List<Cuentas> cuentasDelCliente, Integer pkCuenta) {
        List<Tarjetas> lista = new ArrayList<>();
        Iterator it = cuentasDelCliente.iterator();
        boolean igual = false;
        while (it.hasNext() && igual == false) {
            Cuentas cuenta = (Cuentas) it.next();
            if (cuenta.getPkCuenta().equals(pkCuenta)) {
                if (cuenta.getTarjetases() != null) {
                    Iterator itcuenta = cuenta.getTarjetases().iterator();
                    while (itcuenta.hasNext()) {
                        Tarjetas tarjeta = (Tarjetas) itcuenta.next();
                        lista.add(tarjeta);
                    }
                }
                igual = true;
            }
        }
        return lista;
    }

    public List<Tarjetas> getList(List<Cuentas> cuentasDelCliente) {
        List<Tarjetas> lista = new ArrayList<>();
        for (Cuentas cuenta : cuentasDelCliente) {
            if (cuenta.getTarjetases() != null) {
                Iterator itcuenta = cuenta.getTarjetases().iterator();
                while (itcuenta.hasNext()) {
                    Tarjetas tarjeta = (Tarjetas) itcuenta.next();
                    lista.add(tarjeta);
                }
            }
        }
        return lista;
    }

    public void delete(Integer pkTarjeta) {
        Tarjetas tarjeta = this.get(pkTarjeta);
        hSession.beginTransaction();
        hSession.delete(tarjeta);
        hSession.getTransaction().commit();
    }
}
